#ifndef XVIDEOWIDGET_H
#define XVIDEOWIDGET_H

//Внутренняя библиотека.
#include "vidwidget.h"


//Библиотека X11.
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/extensions/Xv.h>
#include <X11/extensions/Xvlib.h>
#include <set>
#include <map>


//Объявление внешних классов.
class VidFrame;


class XVideoWidget : public VidWidget
{
	Q_OBJECT
signals:
	void needRepaint();

public:
	//Конструктор.
	XVideoWidget(int index, QWidget *parent = NULL);

	//Деструктор.
	virtual ~XVideoWidget();

	//Функция возврата типа видеоокна.
	virtual VidWidget::WINTYPE getType();

protected:
	//Событие перерисовки виджета.
	virtual void paintEvent(QPaintEvent *event);

	//Событие уровня приложения.
	virtual void customEvent(QEvent *event);

private:
	XvPortID port;

	static std::set<XvPortID> grabbedPorts;

	XvImage *xvImage;

	bool requireColourKey;
	int  colourKey;

	VidFrame *vidFrame;

	bool isCapturing;

	//Функция активации видеопотока.
	void startVideo();

	//Функция остановки видеопотока.
	void stopVideo();

	//Функция поиска "атома" (хрен знает что).
	Atom findAtom(Display *display, const char *name);

	//Функция конвертации видеоформата v4l2 в XVideo.
	int v4l2ToXVideoPixFmt(int v4l2pixfmt);

};

#endif
